package Metronome;

import IHM.Afficheur;

/**
 * Implementation d'afficheur
 *
 */
public class ControlerImpl implements Controler{
	private MoteurMetronome moteur;
	private Afficheur afficheur;
	private boolean isLedTempoOn;
	
	/**
	 * Contructeur de l'interface qui gere le lien entre le moteur et l'IHM
	 * @param moteur
	 * @param afficheur 
	 */
	public ControlerImpl(MoteurMetronome moteur, Afficheur afficheur){
		this.moteur = moteur;
		this.afficheur = afficheur;
		this.isLedTempoOn = false;
	}
 
	public MoteurMetronome getMoteur(){
		return moteur;
	}
	 public void start() {
		 if(!moteur.getEtatMarche())
			 moteur.setEtatMarche(true);
	 }
	 
	 public void stop() {
		 if(moteur.getEtatMarche())
			 moteur.setEtatMarche(false);
	 }

	public void setMoteur(MoteurMetronome moteur) {
		this.moteur = moteur;
	}

	@Override
	public void update() {
		afficheur.enableButtons(moteur.getEtatMarche());
	}

	@Override
	public void update(float position, boolean ok) {
		int max = moteur.getMaxTempo();
		int min =  moteur.getMinTempo();
		float value = (position*(max - min) + min );
		moteur.setTempo(value);
		afficheur.afficherTempo(value);
		
		if(ok && moteur.getEtatMarche()){
			stop();
			start();
		}
	}

	@Override
	public void increment() {
		if(moteur.getNbTempsParMesure() < 7 ){
			moteur.setNbTempsParMesure(moteur.getNbTempsParMesure()+1);
			afficheur.afficherMesure(moteur.getNbTempsParMesure());
			if ( moteur.getEtatMarche()){
				stop();
				start();
			}
		}
	}

	@Override
	public void decrement() {
		if(moteur.getNbTempsParMesure() > 2){
			moteur.setNbTempsParMesure(moteur.getNbTempsParMesure()-1);
			afficheur.afficherMesure(moteur.getNbTempsParMesure());
			if ( moteur.getEtatMarche()){
				stop();
				start();
			}
		}
	}

	@Override
	public void emettreClic() {
		afficheur.emettreClic();	
	}

	@Override
	public void marquerTemps() {
		/*if(isLedTempoOn){
			afficheur.eteindreLED(1);
			isLedTempoOn = false;
		}else{
			afficheur.allumerLED(1);
			isLedTempoOn = true;
		}*/
		
		afficheur.allumerLED(1);
		try {
			Thread.sleep(150);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		afficheur.eteindreLED(1);
	}

	@Override
	public void marquerMesure() {
		/*if(isLedMesureOn){
			afficheur.eteindreLED(0);
			isLedMesureOn = false;
		}else{
			afficheur.allumerLED(0);
			isLedMesureOn = true;
		}
		*/
		
		afficheur.allumerLED(0);
		try {
			Thread.sleep(150);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		afficheur.eteindreLED(0);
	}
}
